home *** CD-ROM | disk | FTP | other *** search
/ Aminet 20 / Aminet 20 (1997)(GTI - Schatztruhe)[!][Aug 1997].iso / Aminet / dev / src / TDRenderLib.lha / tdrenderlib / e_src / tdrender_DEMO.e next >
Text File  |  1997-06-22  |  22KB  |  514 lines

  1. ->  TDRender DEMO V1.0 
  2. ->  Yves Rosso - 1997
  3. ->  Example for TDRender Lib use
  4.  
  5. ->  OpenCyberGfx BigScreen - BackDropWindow
  6. ->  For Double Buffering Use In 15/16/24 Bit Mode
  7.  
  8.  
  9. -> OPT LARGE,STACK=200000,OSVERSION=39
  10.     ->,RTD,020,881
  11.  
  12.  
  13. MODULE 'cybergraphics',
  14.        'libraries/cybergraphics',
  15.        'intuition/intuition',
  16.        'intuition/screens',
  17.        'graphics/gfx',
  18.        'graphics/rastport',
  19.        'graphics/view',
  20.        'dos',
  21.        'dos/dos',
  22.        'exec/memory',
  23.        'fpu/68881_single',
  24.        '*tdrender_lib',
  25.        '*tdrender',
  26.        '*tdrender_lvo'
  27.        
  28. ENUM ERR_NONE, ERR_LIB, ERR_REQ, ERR_SCR, ERR_WIN, ERR_OPFIL, ERR_MEM
  29.  
  30. RAISE ERR_LIB   IF OpenLibrary()=NIL,
  31.       ERR_REQ   IF BestCModeIDTagList()=-1,
  32.       ERR_SCR   IF OpenScreenTagList()=NIL,
  33.       ERR_WIN   IF OpenWindowTagList()=NIL,
  34.       ERR_OPFIL IF Open()=NIL,
  35.       ERR_MEM   IF NewM()=NIL
  36.  
  37. CONST DBX=320,DBY=240           -> Dimension of TDRender Lib Buffer
  38.                                 -> ( Limited to 320x240x32 in asm source )
  39.  
  40. CONST SCX=640,SCY=480,SCD=15    -> Dimension of the 1/2 screen that will be opened
  41.                                 -> ( 1/2 because here a 640x960 screen is opened
  42.                                 ->   for double-buffering frames )
  43.  
  44. CONST NBSTARS=200               -> nb/2 visible stars (x,y) coords by step 2
  45.     
  46.  
  47. -> ******************************************************************************
  48. -> ******************************************************************************
  49. PROC main() HANDLE -> ***********************************************************
  50.  
  51.  
  52. DEF scr:PTR TO screen,
  53.     wnd:PTR TO window,
  54.     rp:PTR TO rastport,
  55.     wrp,
  56.     vp:PTR TO viewport,
  57.     ri:PTR TO rasinfo,
  58.     depth,width,height,modeid
  59.  
  60. DEF i,rand,
  61.     dt,adv,
  62.     countpix,vloop,quit=FALSE
  63.  
  64.  
  65. DEF filename[40]:STRING,
  66.     file,
  67.     closfil,
  68.     filelen,
  69.     framebuffer:PTR TO LONG,
  70.     imagbuffer:PTR TO LONG,
  71.     imagbufferalp:PTR TO LONG,
  72.     starsbuffer:PTR TO LONG,
  73.     readlength
  74.  
  75. DEF stnb,xd,yd,xr,yr,angr,
  76.     xcam,ycam,zcam,
  77.     acam,bcam,ccam,
  78.     xobj,yobj,zobj,
  79.     aobj,bobj,cobj,
  80.     xot,yot,zot,
  81.     aot,bot,cot
  82.  
  83.  
  84. DEF meteor:PTR TO LONG,
  85.     strshp:PTR TO LONG,
  86.     strspp:PTR TO LONG,
  87.     meteorlist:PTR TO LONG
  88.     
  89. -> ******************************************************************************
  90.      /*===================*/
  91.      /* Open Libs & Inits */
  92.      /*===================*/
  93.    cybergfxbase:=OpenLibrary('cybergraphics.library',40)
  94.  
  95.    tdrenderbase:=OpenLibrary('tdrender.library',1)
  96.     modeid:=BestCModeIDTagList([CYBRBIDTG_Depth,         SCD,   -> get best match ID
  97.                                 CYBRBIDTG_NominalWidth,  SCX,
  98.                                 CYBRBIDTG_NominalHeight, SCY])
  99.  
  100.    depth:=GetCyberIDAttr(CYBRIDATTR_DEPTH,modeid)
  101.  
  102. -> ******************************************************************************
  103.      /*=============*/
  104.      /* Open screen */
  105.      /*=============*/
  106.  
  107.     scr:=OpenScreenTagList(NIL,[SA_DISPLAYID,   modeid,
  108.                                 SA_WIDTH,          SCX,
  109.                                 SA_HEIGHT,       SCY*2, -> double height for DblBuffer
  110.                                 SA_DEPTH,          SCD,
  111.                                 SA_DRAGGABLE,        0,
  112.                                 SA_AUTOSCROLL,       0, -> to prevent screen following
  113.                                 SA_OVERSCAN,         1,   -> mouse movements.
  114.                                 SA_QUIET,            1,
  115.                                 SA_TITLE,            0,
  116.                                 SA_SHOWTITLE,        0,
  117.                                 NIL,NIL])
  118.      ShowTitle(scr,FALSE)
  119.  
  120.      width:=scr.width
  121.      height:=scr.height
  122.  
  123.      WriteF(' Screen : \d x \d x \d   ID : \d \n',width,height,depth,modeid)
  124.  
  125. -> ******************************************************************************
  126.      /*=============*/
  127.      /* Open window */
  128.      /*=============*/
  129.  
  130.      wnd:=OpenWindowTagList(NIL,[WA_ACTIVATE,          TRUE,
  131.                                  WA_CUSTOMSCREEN,      scr,
  132.                                  WA_WIDTH,             SCX,
  133.                                  WA_HEIGHT,           SCY*2,
  134.                                  WA_BORDERLESS,        TRUE,
  135.                                  WA_BACKDROP,          TRUE,
  136.                                  WA_TITLE,             NIL,
  137.                                  WA_FLAGS,        WFLG_ACTIVATE,-> OR WFLG_REPORTMOUSE,
  138.                                  WA_IDCMP,        IDCMP_RAWKEY OR IDCMP_MOUSEBUTTONS
  139.                                                                OR IDCMP_MOUSEMOVE,
  140.                                  NIL])
  141.      rp:=scr.rastport
  142.      wrp:=wnd.rport
  143.      vp:=scr.viewport
  144.      ri:=vp.rasinfo
  145.  
  146.    countpix:=FillPixelArray(wrp,0,0,SCX,SCY*2,$00555555)     -> Clear Frame
  147.  
  148. -> ******************************************************************************
  149.      /*========================================*/
  150.      /* Allocate Memory for 32 bit xRGB buffer */
  151.      /*========================================*/
  152.  
  153.      framebuffer:=NewM(DBX*DBY*4+64,MEMF_FAST)  -> DBX x DBY 
  154.                                                 -> 32=4x8 bit xRGB Buffer
  155.                                                 -> Provided to TDRenderLibrary
  156.                                                    
  157. -> ******************************************************************************
  158.      /*=========================*/
  159.      /* Get Coords for 2D stars */
  160.      /*=========================*/
  161.  
  162.      starsbuffer:=NewM(NBSTARS*32,MEMF_FAST)    -> get table for stars coords
  163.      
  164.      Rnd(-1)
  165.  
  166.      FOR i:=0 TO NBSTARS STEP 2                 -> create random 2D coords
  167.          starsbuffer[i  ]:=Rnd(DBX-1)!
  168.          starsbuffer[i+1]:=Rnd(DBY-1)!
  169.      ENDFOR
  170.  
  171. -> ******************************************************************************
  172.      /*===========================*/
  173.      /* Get Coords for 3D meteors */
  174.      /*===========================*/
  175.  
  176.  
  177.      meteorlist:=NewM(220*6*32,MEMF_FAST)       -> Get table for 3D meteors
  178.                                                 -> here 220 meteors 
  179.                                                 -> x 6 (coords x/y/z and rotate a/b/c)
  180.  
  181.      FOR i:=0 TO 199*6 STEP 6                
  182.          meteorlist[i  ]:=Rnd(5000)-Rnd(5000)   -> Create random 3D coords in space
  183.          meteorlist[i+1]:=Rnd(5000)-Rnd(5000)
  184.          meteorlist[i+2]:=Rnd(20000)-Rnd(20000)
  185.  
  186.          meteorlist[i+3]:=-360+Rnd(720)         -> Create random spatial rotate speeds
  187.          meteorlist[i+4]:=-360+Rnd(720)
  188.          meteorlist[i+5]:=0
  189.      ENDFOR
  190.  
  191.  
  192.  
  193.  
  194. -> ******************************************************************************
  195. -> 3 Objects Examples 
  196. -> - 3 or 4 pts per faces ( 4pts -> 2 x 3pts internally )
  197. -> - coords and colours in 32bit format easy to use in E but certainly slooowww with no 060 !
  198. -> - possible to have unshaded faces that appears luminous in shadows.( Shade or opt. column )
  199. -> - coords of faces must be created in direct order to be visible in the right side
  200. -> ******************************************************************************
  201.  
  202. -> org: (Nb Pts Per Face) , (Color Of Face In xRGB32) , (List Of Pts For Face)... , (Face Option)
  203. -> Meteor-4 ( COG in middle of object )
  204.  
  205. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  206. ->      | NbPts |  Colour ||  X    Y    Z ||  X    Y    Z ||  X    Y    Z || Shade or Opt |
  207. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  208. meteor:=[   3,   $00BB6644,  110,   0,  40,   60,  80,  50,   30,  10,  90,           1,
  209.             3,   $00BB6644,   60,  80,  50,  -80,  60,  70,   30,  10,  90,           1,
  210.             3,   $00BB6644,  -80,  60,  70,  -60, -60,  60,   30,  10,  90,           1,
  211.             3,   $00BB6644,  -60, -60,  60,   50, -80,  30,   30,  10,  90,           1,
  212.             3,   $00BB6644,   50, -80,  30,  110,   0,  40,   30,  10,  90,           1,
  213.             3,   $00BB6644,   60,  80,  50,  110,   0,  40,   90,  60, -50,           1,
  214.             3,   $00BB6644,  -80,  60,  70,   60,  80,  50,  -20, 100, -70,           1,
  215.             3,   $00BB6644,  -60, -60,  60,  -80,  60,  70,  -90, -20, -60,           1,
  216.             3,   $00BB6644,   50, -80,  30,  -60, -60,  60,  -20,-100, -60,           1,
  217.             3,   $00BB6644,  110,   0,  40,   50, -80,  30,   90, -60, -50,           1,
  218.             3,   $00BB6644,   90,  60, -50,  -20, 100, -70,   60,  80,  50,           1,
  219.             3,   $00BB6644,  -20, 100, -70,  -90, -20, -60,  -80,  60,  70,           1,
  220.             3,   $00BB6644,  -90, -20, -60,  -20,-100, -60,  -60, -60,  60,           1,
  221.             3,   $00BB6644,  -20,-100, -60,   90, -60, -50,   50, -80,  30,           1,
  222.             3,   $00BB6644,   90, -60, -50,   90,  60, -50,  110,   0,  40,           1,
  223.             3,   $00BB6644,  -20, 100, -70,   90,  60, -50,  -20,   0,-110,           1,
  224.             3,   $00BB6644,  -90, -20, -60,  -20, 100, -70,  -20,   0,-110,           1,
  225.             3,   $00BB6644,  -20,-100, -60,  -90, -20, -60,  -20,   0,-110,           1,
  226.             3,   $00BB6644,   90, -60, -50,  -20,   0,-110,   90,  60, -50,           1,
  227.             3,   $00BB6644,   90, -60, -50,  -20,-100, -60,  -20,   0,-110,           1,
  228.             0,           0,    0,   0,   0,    0,   0,   0,    0,   0,   0,           0]
  229. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  230. ->      | NbPts |  Colour ||  X    Y    Z ||  X    Y    Z ||  X    Y    Z || Shade or Opt |
  231. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  232.  
  233. -> ******************************************************************************
  234.  
  235. -> org: (Nb Pts Per Face) , (Color Of Face In xRGB32) , (List Of Pts For Face)... , (Face Option)
  236. -> StarShip-02 ( COG in middle of object )
  237.  
  238.  
  239. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  240. ->      | NbPts |  Colour ||  X    Y    Z ||  X    Y    Z ||  X    Y    Z || Shade or Opt |
  241. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  242. strspp:=[   3,   $00EEEEFF,  -60, 130, -20,   50, 130,  10,   60, 130, -20,           0,
  243.             3,   $00EEEEFF,   50, 130,  10,  -60, 130, -20,  -50, 130,  10,           0,
  244.             3,   $00EEEEFF,  -50, 130,  10,  -60, 130, -20,  -70, 110,   0,           0,
  245.             3,   $00EEEEFF,   60, 130, -20,   50, 130,  10,   70, 110,   0,           0,
  246.             3,   $00AACCDD,  -60, 130, -20,   60, 130, -20,   50,  30, -30,           1,
  247.             3,   $00AACCDD,  -60, 130, -20,   50,  30, -30,  -50,  30, -30,           1,
  248.             3,   $00AACCDD,   50,  30, -30,   60, 130, -20,   70, 110,   0,           0,
  249.             3,   $00AACCDD,  -60, 130, -20,  -50,  30, -30,  -70, 110,   0,           0,
  250.             3,   $00555555,  -70, 110,   0,  -50,  30, -30,  -60, -30, -20,           1,
  251.             3,   $00555555,   50,  30, -30,   70, 110,   0,   60, -30, -20,           1,
  252.             3,   $00AACCDD,   60, -30, -20,   70, 110,   0,   60, -20,   0,           1,
  253.             3,   $00AACCDD,  -70, 110,   0,  -60, -30, -20,  -60, -20,   0,           1,
  254.             3,   $00AACCDD,  -70, 110,   0,  -60, -20,   0,  -40,   0,  20,           1,
  255.             3,   $00AACCDD,  -70, 110,   0,  -40,   0,  20,  -50, 130,  10,           0,
  256.             3,   $00AACCDD,   50, 130,  10,  -50, 130,  10,   40,   0,  20,           1,
  257.             3,   $00AACCDD,  -50, 130,  10,  -40,   0,  20,   40,   0,  20,           1,
  258.             3,   $00AACCDD,   50, 130,  10,   40,   0,  20,   70, 110,   0,           0,
  259.             3,   $00AACCDD,   60, -20,   0,   70, 110,   0,   40,   0,  20,           1,
  260.             3,   $00AA0000,   40,   0,  20,  -20, -60,  20,   20, -60,  20,           0,
  261.             3,   $00AA0000,  -20, -60,  20,   40,   0,  20,  -40,   0,  20,           0,
  262.             3,   $00AACCDD,   40,   0,  20,   20, -60,  20,   60, -20,   0,           1,
  263.             3,   $00AACCDD,   60, -20,   0,   20, -60,  20,   40, -90,   0,           1,
  264.             3,   $00AACCDD,  -20, -60,  20,  -40,   0,  20,  -60, -20,   0,           1,
  265.             3,   $00AACCDD,  -20, -60,  20,  -60, -20,   0,  -40, -90,   0,           1,
  266.             3,   $00AACCDD,  -40, -90,   0,  -60, -20,   0,  -60, -30, -20,           1,
  267.             3,   $00AACCDD,  -40, -90,   0,  -60, -30, -20,  -30, -80, -20,           1,
  268.             3,   $00AACCDD,   60, -20,   0,   40, -90,   0,   60, -30, -20,           1,
  269.             3,   $00AACCDD,   60, -30, -20,   40, -90,   0,   30, -80, -20,           1,
  270.             3,   $00223355,  -30, -80, -20,  -60, -30, -20,  -20, -60, -30,           1,
  271.             3,   $00223355,  -20, -60, -30,  -60, -30, -20,  -50,  30, -30,           1,
  272.             3,   $00223355,   60, -30, -20,   30, -80, -20,   20, -60, -30,           1,
  273.             3,   $00223355,   60, -30, -20,   20, -60, -30,   50,  30, -30,           1,
  274.             3,   $00AACCDD,  -20, -60, -30,  -50,  30, -30,   50,  30, -30,           1,
  275.             3,   $00AACCDD,   50,  30, -30,   20, -60, -30,  -20, -60, -30,           1,
  276.             3,   $00AACCDD,   30, -80, -20,   40, -90,   0,    0,-140, -10,           1,
  277.             3,   $00AACCDD,  -40, -90,   0,  -30, -80, -20,    0,-140, -10,           1,
  278.             3,   $00AACCDD,  -40, -90,   0,    0,-140, -10,    0,-130,   0,           0,
  279.             3,   $00AACCDD,    0,-130,   0,    0,-140, -10,   40, -90,   0,           0,
  280.             3,   $00223355,  -30, -80, -20,  -20, -60, -30,    0,-140, -10,           1,
  281.             3,   $00223355,    0,-140, -10,  -20, -60, -30,   20, -60, -30,           1,
  282.             3,   $00223355,   30, -80, -20,    0,-140, -10,   20, -60, -30,           1,
  283.             3,   $00AA0000,   20, -60,  20,  -20, -60,  20,    0,-130,   0,           0,
  284.             3,   $00AACCDD,   40, -90,   0,   20, -60,  20,    0,-130,   0,           1,
  285.             3,   $00AACCDD,  -40, -90,   0,    0,-130,   0,  -20, -60,  20,           1,
  286.             0,           0,    0,   0,   0,    0,   0,   0,    0,   0,   0,           0]
  287. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  288. ->      | NbPts |  Colour ||  X    Y    Z ||  X    Y    Z ||  X    Y    Z || Shade or Opt |
  289. ->      +-------+---------++--------------++--------------++--------------++--------------+ 
  290.  
  291. -> ******************************************************************************
  292.  
  293. -> org: (Nb Pts Per Face) , (Color Of Face In xRGB32) , (List Of Pts For Face)... , (Face Option)
  294. -> StarShip Oomy
  295. ->         +-------+---------+--------------+--------------+--------------+--------------+--------------+ 
  296. ->         | NbPts |  Colour |  X    Y    Z |  X    Y    Z |  X    Y    Z |  X    Y    Z | Shade or Opt |
  297. ->         +-------+---------+--------------+--------------+--------------+--------------+--------------+ 
  298. ->   Down
  299.     strshp:=[   4,  $00777777, 310,  20,  80, 310,  20, -80,-180,  20,-120,-180,  20, 120,      1,
  300. ->   Up
  301.                 4,  $00DDDDFF,  40, -40,  40,-180, -40, 120,-180, -40,-120,  40, -40, -40,      1,
  302. ->   Front
  303.                 4,  $00555555, 310,  20,  80,  40, -40,  40,  40, -40, -40, 310,  20, -80,      1,
  304. ->   Engine Back
  305.                 4,  $00FEFEFE,-180, -40, 120,-180,  20, 120,-180,  20,-120,-180, -40,-120,      0,
  306. ->   Engine Back Left
  307.                 3,  $00DEEEFF,-180, -40,-120,-180,  20,-120,   0,   0,-280,                     1,
  308. ->   Engine Back Right
  309.                 3,  $00DFEFFF,-180,  20, 120,-180, -40, 120,   0,   0, 280,                     1,
  310. ->   Up Right Front
  311.                 3,  $000073DD,  40, -40,  40, 310,  20,  80,   0,   0, 280,                     1,
  312. ->   Up Right Back
  313.                 3,  $00CCCCEE,-180, -40, 120,  40, -40,  40,   0,   0, 280,                     1,
  314. ->   Down Right
  315.                 3,  $000075DD, 310,  20,  80,-180,  20, 120,   0,   0, 280,                     1,
  316. ->   Up Left Front
  317.                 3,  $000076DD, 310,  20, -80,  40, -40, -40,   0,   0,-280,                     1,
  318. ->   Up Left Back
  319.                 3,  $00CCCCEF,  40, -40, -40,-180, -40,-120,   0,   0,-280,                     1,
  320. ->   Down Left
  321.                 3,  $000078DD,-180,  20,-120, 310,  20, -80,   0,   0,-280,                     1,
  322. ->   END
  323.                 0,          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,      0]
  324. ->         +-------+---------+--------------+--------------+--------------+--------------+--------------+ 
  325. ->         | NbPts |  Colour |  X    Y    Z |  X    Y    Z |  X    Y    Z |  X    Y    Z | Shade or Opt |
  326. ->         +-------+---------+--------------+--------------+--------------+--------------+--------------+ 
  327.  
  328. -> ******************************************************************************
  329.  
  330.    vloop:=1
  331.       
  332.    dt:=3
  333.    adv:=1
  334.  
  335.     xcam:=0
  336.     ycam:=0
  337.     zcam:=0
  338.     
  339.     acam:=0
  340.     bcam:=0
  341.     ccam:=0
  342.     
  343. -> ******************************************************************************
  344. -> ******************************************************************************
  345.      /*================================*/
  346.      /* BEGIN of Anim and Object Moves */
  347.      /*================================*/
  348.  
  349.    TdSetLight(0,0,0,-10,-10,5)                  -> Set light vector direction
  350.    
  351.   
  352.  REPEAT
  353. -> ******************************************************************************
  354. -> ******************************************************************************
  355.  
  356.      dt:=dt+adv
  357.      
  358.      
  359. -> ==============================================================================          
  360. ->  RENDER FRAME FUNCTIONS
  361. -> ==============================================================================          
  362.  
  363.  
  364.     
  365.   TdClearFrmBuf(framebuffer)                    -> Clear frame buffer
  366. ->  TdClearFrmBufCol(framebuffer,$00112255)     -> Clear frame buffer to dark blue
  367.  
  368.   xr:=MouseX(wnd)                               -> Get mouse pos to modify 
  369.   yr:=MouseY(wnd)                               -> 3D environement view direction
  370.   xd:=((SCX/2)-xr)/90
  371.   yd:=(yr-(SCY/2))/40
  372.   angr:=xd*3
  373.   stnb:=(NBSTARS/2)-1
  374.  
  375. /*------------*/ 
  376. /* Stars Part */
  377. /*------------*/ 
  378.  
  379.   TdDrawStars(framebuffer,starsbuffer,stnb,0)               -> draw stars in buffer
  380.   TdMovRotStars(starsbuffer,xd*3,yd*3,0,0,0,stnb)           -> rotate stars coordinates
  381.  
  382. /*----------------------*/ 
  383.  
  384. ->   TdSetLight(-80000,80000,20000,0,0,0) -> 3600-(dt*20))  -> possible to get the light moving
  385.  
  386. /*----------------------*/ 
  387. /* Camera Part Absolute */
  388. /*----------------------*/ 
  389.  
  390.     xcam:=0   
  391.     ycam:=0   
  392.     zcam:=0   
  393.  
  394.     
  395.     acam:=0   
  396.     bcam:=bcam+xd   
  397.     ccam:=ccam-yd
  398.  
  399.    TdSetCamera(xcam,ycam,zcam,acam,bcam,ccam)               -> Set camera vector direction of view
  400.   
  401. /*----------------------*/ 
  402. /* Object Part Absolute */
  403. /*----------------------*/ 
  404.  
  405.     xobj:=0
  406.     yobj:=0
  407.     zobj:=(360*10)-(dt*20)
  408.  
  409.     aobj:=dt*6      
  410.     bobj:=(dt+90)*6+90
  411.     cobj:=0           
  412.     
  413. /*------------------*/ 
  414. /* Object Part Draw */
  415. /*------------------*/ 
  416.  
  417.  
  418. FOR i:=0 TO 199*6 STEP 6
  419.     TdDrwObFrmCam(framebuffer,meteor,meteorlist[i],meteorlist[i+1],meteorlist[i+2],meteorlist[i+3]+aobj,meteorlist[i+4]+bobj,0)
  420.     meteorlist[i+2]:=meteorlist[i+2]-Abs(meteorlist[i+3]/2)
  421.     IF meteorlist[i+2]<-20000 THEN meteorlist[i+2]:=20000
  422. ENDFOR
  423.  
  424. /*-------------*/ 
  425.  
  426.   TdDrwObFrmCam(framebuffer,strspp,0,0,800,(xr-320)/4,(xr-320)/4+180,(yr-240)/3+90)
  427.  
  428. /*-------------*/ 
  429.  
  430.  TdBox(framebuffer,0,0,319,239,$002266AA)
  431.  
  432.  
  433. -> ==============================================================================          
  434. -> ======================= FLIP DOUBLE HEIGTH SCREEN ============================
  435. IF ri.ryoffset=DBY
  436.  
  437. -> Hight Part Of Screen *********************************************************
  438.  
  439.     countpix:=WritePixelArray(framebuffer,0,0,DBX*4,wrp,(SCX-DBX)/2,(SCY-DBY)/2,DBX,DBY,RECTFMT_ARGB)
  440.     -> blit frame buffer on the upper part of window
  441.  
  442.     ri.ryoffset:=0      -> modify offset position of screen
  443.  
  444. ELSE
  445.  
  446. -> Low Part Of Screen ***********************************************************
  447.  
  448.     countpix:=WritePixelArray(framebuffer,0,0,DBX*4,wrp,(SCX-DBX)/2,(SCY-DBY)/2+SCY,DBX,DBY,RECTFMT_ARGB)
  449.     -> blit frame buffer on lower part ofwindow
  450.  
  451.     countpix:=FillPixelArray(wrp,(SCX-DBX)/2,(SCY-DBY)/2+SCY,10,10,$00CC0000)   
  452.     -> Frame Test to see screen flipping
  453.     -> ( little red square )
  454.  
  455.     ri.ryoffset:=SCY    -> modify offset position of screen
  456.  
  457. ENDIF
  458.  
  459.  
  460.      ScrollVPort(vp)    -> Switch to selected offset position
  461.  
  462.  
  463. -> ==============================================================================          
  464. -> ==============================================================================          
  465.     IF dt>359 THEN dt:=1
  466.     IF dt<1   THEN dt:=359
  467.     quit:=mouse(wnd)            -> Quit if you click left mouse button
  468.  
  469. -> ******************************************************************************
  470. -> ******************************************************************************
  471.  
  472.  UNTIL quit=TRUE OR CtrlC()
  473.  
  474. -> ******************************************************************************
  475.      /*=====================*/
  476.      /* BEGIN of Exceptions */
  477.      /*=====================*/
  478.  
  479. EXCEPT DO
  480.     IF wnd THEN CloseWindow(wnd)
  481.     IF scr THEN CloseScreen(scr)
  482.     IF tdrenderbase THEN CloseLibrary(tdrenderbase)
  483.     IF cybergfxbase THEN CloseLibrary(cybergfxbase)
  484.   
  485.  SELECT exception
  486.     CASE ERR_NONE;   WriteF(' All finished with success')
  487.     CASE ERR_LIB;    WriteF(' Error : open library')
  488.     CASE ERR_REQ;    WriteF(' Error : cant get mode ID from cybergfx')
  489.     CASE ERR_SCR;    WriteF(' Error : open screen')
  490.     CASE ERR_WIN;    WriteF(' Error : open window')
  491.     CASE ERR_OPFIL;  WriteF(' Error : open file')
  492.     CASE ERR_MEM;    WriteF(' Error : can not allocate memory')
  493.  ENDSELECT
  494.  
  495. ENDPROC  -> END Of Main *********************************************************
  496. -> ******************************************************************************
  497. -> ******************************************************************************
  498.  
  499.      /*===============*/
  500.      /* BEGIN of Subs */
  501.      /*===============*/
  502.  
  503. PROC mouse(wnd:PTR TO window)
  504. DEF mes:PTR TO intuimessage,quit=FALSE
  505.  
  506.   IF  mes:=GetMsg(wnd.userport)
  507.       IF mes.class=IDCMP_MOUSEBUTTONS THEN quit:=TRUE
  508. ->      IF mes.class=IDCMP_RAWKEY THEN quit:=TRUE
  509.       ReplyMsg(mes)
  510.   ENDIF
  511.  
  512. ENDPROC quit
  513.  
  514.